home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / modula2 / module / oshell.mod < prev    next >
Encoding:
Text File  |  1995-11-25  |  10.5 KB  |  292 lines

  1. (******************************************************************************)
  2. (*      This MODULE is Public Domain. Copy me like a beast!                   *)
  3. (*               Christian Ledermann                                          *)
  4. (*               Wölfelkofen 2                                                *)
  5. (*               84166 Adlkofen                                               *)
  6. (******************************************************************************)
  7. (*                                                                            *)
  8. (* Started:   20.12.92     03:54:30                                           *)
  9. (* Version: 20.12.89   00:084:12:54                                           *)
  10. (*                                                                            *)
  11. (******************************************************************************)
  12. (*                                                                            *)
  13. (* Diese Software ist ohne jede Garantie. Ich verspreche                      *)
  14. (* keinerlei Wartung und übernehme keine Verantwortung für Schäden die        *)
  15. (* durch die Benutzung dieses Programmes entstehen.                           *)
  16. (* Jegliche Ersatzansprüche lehne ich ab.                                     *)
  17. (*                                                                            *)
  18. (******************************************************************************)
  19. MODULE Oshell;
  20.  
  21.  
  22. FROM SYSTEM       IMPORT ADR,ADDRESS,VAL;
  23. FROM Applications IMPORT Init,Terminate,deskx,desky,deskw,deskh,
  24.                          InitResource,ShowMenuBar,ShowNormal,DeskTree,
  25.                          MenuTree,Colour,Appl;
  26. FROM KbdEvnt      IMPORT MenuSearch;
  27. FROM AES          IMPORT ResourceGetAddr,ObjectChange,ObjectFind,FormAlert,
  28. GrafMouse,EventMultiple,FormDialogue,GrafDragBox,WindowFind,GrafRubberBox;
  29.  
  30. FROM EasyDialog    IMPORT EasyFileSelect,and,IsSelected,GetObjectXYWH,
  31. SetObjectXYWH,DoDialog;
  32. FROM GEMAESbase    IMPORT Arrow,PointHand,FlatHand, MesageEvent,TimerEvent,KeyboardEvent,
  33.                        ButtonEvent;
  34.  
  35.  
  36. VAR     RSCfileName : ARRAY[1..12] OF CHAR;
  37.         ENDE : BOOLEAN;
  38.         OK   : BOOLEAN;
  39. CONST
  40.       TREE1 = 0;      (* TREE *)
  41.       TREE2 = 1;      (* TREE *)
  42.       QUIT = 16;      (* OBJECT in TREE #1 *)
  43.       ABOUT = 7;      (* OBJECT in TREE #1 *)
  44.       DESK = 3;      (* OBJECT in TREE #1 *)
  45.       FILE = 4;      (* OBJECT in TREE #1 *)
  46.       WINDOWS = 2;      (* OBJECT in TREE #0 *)
  47.       XWINDOWS = 3;      (* OBJECT in TREE #0 *)
  48.       NEXT = 4;      (* OBJECT in TREE #0 *)
  49.       FLOPPY = 7;      (* OBJECT in TREE #0 *)
  50.       APPLE = 5;      (* OBJECT in TREE #0 *)
  51.       ATARI = 6;      (* OBJECT in TREE #0 *)
  52.       TRASH = 8;      (* OBJECT in TREE #0 *)
  53.       CRAHMEN = 1;      (* OBJECT in TREE #0 *)
  54. ə
  55.  
  56.  
  57. PROCEDURE Apple;
  58. VAR formret : INTEGER;
  59.     String   : ARRAY [0..127] OF  CHAR;
  60. BEGIN
  61.       ObjectChange(DeskTree,APPLE,0,deskx,desky,deskw,deskh,01H,1);
  62.       String :='[0][Apple  |  ][  OK  ]';
  63.       formret:=FormAlert(1,String);
  64.       ObjectChange(DeskTree,APPLE,0,deskx,desky,deskw,deskh,0H,1);
  65. END Apple;
  66.  
  67. PROCEDURE win;
  68. VAR formret : INTEGER;
  69.     String   : ARRAY [0..127] OF  CHAR;
  70. BEGIN
  71.       ObjectChange(DeskTree,WINDOWS,0,deskx,desky,deskw,deskh,01H,1);
  72.       String :='[0][MS-Windows  |  ][  OK  ]';
  73.       formret:=FormAlert(1,String);
  74.       ObjectChange(DeskTree,WINDOWS,0,deskx,desky,deskw,deskh,0H,1);
  75. END win;
  76.  
  77. PROCEDURE Atari;
  78. VAR formret : INTEGER;
  79.     String   : ARRAY [0..127] OF  CHAR;
  80. BEGIN
  81.       ObjectChange(DeskTree,ATARI,0,deskx,desky,deskw,deskh,01H,1);
  82.       String :='[0][ATARI  |  ][  OK  ]';
  83.       formret:=FormAlert(1,String);
  84.       ObjectChange(DeskTree,ATARI,0,deskx,desky,deskw,deskh,0H,1);
  85. END Atari;
  86.  
  87. PROCEDURE Xwin;
  88. VAR formret : INTEGER;
  89.     String   : ARRAY [0..127] OF  CHAR;
  90. BEGIN
  91.       ObjectChange(DeskTree,XWINDOWS,0,deskx,desky,deskw,deskh,01H,1);
  92.       String :='[0][X-Windows  |  ][  OK  ]';
  93.       formret:=FormAlert(1,String);
  94.       ObjectChange(DeskTree,XWINDOWS,0,deskx,desky,deskw,deskh,0H,1);
  95. END Xwin;
  96.  
  97. PROCEDURE Next;
  98. VAR formret : INTEGER;
  99.     String   : ARRAY [0..127] OF  CHAR;
  100. BEGIN
  101.       ObjectChange(DeskTree,NEXT,0,deskx,desky,deskw,deskh,01H,1);
  102.       String :='[0][Next  |  ][  OK  ]';
  103.       formret:=FormAlert(1,String);
  104.       ObjectChange(DeskTree,NEXT,0,deskx,desky,deskw,deskh,0H,1);
  105. END Next;
  106.  
  107. PROCEDURE Floppy;
  108. VAR OK : BOOLEAN;
  109.     Pfd,DNme,USchrft : ARRAY [0..127] OF CHAR;
  110. BEGIN
  111.      ObjectChange(DeskTree,FLOPPY,0,deskx,desky,deskw,deskh,01H,1);
  112.      Pfd:='*.DTA';
  113.      DNme:='UNTITLED.DTA';
  114.      USchrft:=' 3.5" Floppy ';
  115.      OK:=EasyFileSelect(Pfd,DNme,USchrft);
  116.      ObjectChange(DeskTree,FLOPPY,0,deskx,desky,deskw,deskh,0H,1);
  117. END Floppy;
  118.  
  119. PROCEDURE Loesche;
  120. VAR OK : BOOLEAN;
  121.     Pfd,DNme,USchrft : ARRAY [0..127] OF CHAR;
  122. BEGIN
  123.      ObjectChange(DeskTree,TRASH,0,deskx,desky,deskw,deskh,01H,1);
  124.      Pfd:='*.DTA';
  125.      DNme:='UNTITLED.DTA';
  126.      USchrft:=' Datei löschen ';
  127.      OK:=EasyFileSelect(Pfd,DNme,USchrft);
  128.      ObjectChange(DeskTree,TRASH,0,deskx,desky,deskw,deskh,0H,1);
  129. END Loesche;
  130.  
  131. PROCEDURE DeselectIcon;
  132. BEGIN
  133.       ObjectChange(DeskTree,APPLE,0,deskx,desky,deskw,deskh,0H,1);
  134.       ObjectChange(DeskTree,WINDOWS,0,deskx,desky,deskw,deskh,0H,1);
  135.       ObjectChange(DeskTree,ATARI,0,deskx,desky,deskw,deskh,0H,1);
  136.       ObjectChange(DeskTree,XWINDOWS,0,deskx,desky,deskw,deskh,0H,1);
  137.       ObjectChange(DeskTree,NEXT,0,deskx,desky,deskw,deskh,0H,1);
  138.       ObjectChange(DeskTree,FLOPPY,0,deskx,desky,deskw,deskh,0H,1);
  139.       ObjectChange(DeskTree,TRASH,0,deskx,desky,deskw,deskh,0H,1);
  140. END  DeselectIcon;
  141.  
  142. PROCEDURE SelectIcon(Icon :INTEGER);
  143. BEGIN
  144.    IF IsSelected(Icon,DeskTree) THEN
  145.        CASE Icon OF
  146.           APPLE    : Apple
  147.           |WINDOWS : win
  148.           |ATARI   : Atari
  149.           |XWINDOWS: Xwin
  150.           |NEXT    : Next
  151.        ELSE
  152.           (* WriteInt(message,5);*)
  153.        END(*CASE*);
  154.    ELSE
  155.       DeselectIcon;
  156.       ObjectChange(DeskTree,Icon,0,deskx,desky,deskw,deskh,01H,1);
  157.   END(*IF*);
  158. END  SelectIcon;
  159.  
  160. PROCEDURE MoveIcon(Icon:INTEGER);
  161. VAR x,y,w,h :CARDINAL;
  162.     xF,yF,formret :INTEGER;
  163.     String   : ARRAY [0..127] OF  CHAR;
  164.  
  165. BEGIN
  166.      GetObjectXYWH(Icon,DeskTree,x,y,w,h);
  167.      GrafMouse(FlatHand,NIL);
  168.      GrafDragBox (w,h,x,y,deskx,desky, deskw, deskh,xF,yF);
  169.      IF WindowFind(xF,yF)=0 THEN (* Icons nicht in Fenster ablegen ! *)
  170.        SetObjectXYWH(Icon,DeskTree,xF,yF,w,h);
  171.        IF (xF#VAL(INTEGER,x)) AND (yF#VAL(INTEGER,y)) THEN
  172.            (* Redraw erzwingen an der Stelle an der das Icon war *)
  173.            FormDialogue(0,0,0,0,0,x,y,w,h);
  174.            FormDialogue(3,0,0,0,0,x,y,w,h);
  175.            (* Redraw an der Stelle an der das Icon jetzt ist *)
  176.            FormDialogue(0,0,0,0,0,xF,yF,w,h);
  177.            FormDialogue(3,0,0,0,0,xF,yF,w,h);
  178.        END(*IF*);
  179.     ELSE
  180.       String :='[3][Icons nicht in |Fenster legen  |  ][  OK  ]';
  181.       formret:=FormAlert(1,String);
  182.     END(*IF*);
  183.      GrafMouse(Arrow,NIL);
  184.  
  185. END  MoveIcon;
  186.  
  187.  
  188.  
  189. PROCEDURE Auswahl;
  190. VAR formret : INTEGER;
  191.     String   : ARRAY [0..127] OF  CHAR;
  192.     message :INTEGER;
  193.     events,flag,mx,my,mbutton,mstate,scancode,mclicks:INTEGER;
  194.     RetChar : CHAR;
  195.     MsgBuf :ARRAY[0..7] OF INTEGER;
  196.     InfoAdr : ADDRESS;
  197.  
  198. BEGIN
  199. flag :=MesageEvent+TimerEvent+KeyboardEvent+ButtonEvent;
  200. REPEAT
  201.  ENDE := FALSE;
  202.  events:=EventMultiple(flag,2,03,01,0,0,0,0,0,0,0,0,0,0,
  203.                        ADR(MsgBuf),10000,0,(* Timer Event*)
  204.                        mx,my,
  205.                        mbutton,mstate,scancode,mclicks);
  206.  IF and(events,MesageEvent)THEN
  207.     message:= MsgBuf[4];
  208.      CASE message OF
  209.         ABOUT   :  String :='[0][ So wird ein Desktop |  verwaltet | Ein Programm von |  Christian   Ledermann| ver 0.0 vom 25.02.92 ][  OK  ]';
  210.                    formret:=FormAlert(1,String);
  211.         |QUIT   : ENDE := TRUE
  212.      ELSE
  213.         ;
  214.      END(*CASE*);
  215.  END(*IF*);
  216.  IF and(events,ButtonEvent)THEN
  217.    IF WindowFind(mx,my)=0 THEN
  218.     message :=ObjectFind(DeskTree,0,6,mx,my);
  219.     IF mclicks=2 THEN
  220.        CASE message OF
  221.           APPLE    : Apple
  222.           |WINDOWS : win
  223.           |ATARI   : Atari
  224.           |XWINDOWS: Xwin
  225.           |NEXT    : Next
  226.           |FLOPPY  : Floppy
  227.           |TRASH   : Loesche
  228.           |CRAHMEN : DeselectIcon
  229.        ELSE
  230.           DeselectIcon;
  231.        END(*CASE*);
  232.     ELSE
  233.        CASE message OF
  234.           APPLE, WINDOWS, ATARI, XWINDOWS, NEXT
  235.                  : SelectIcon(message);
  236.           |FLOPPY, TRASH
  237.                  : SelectIcon(message); MoveIcon(message)
  238.           |CRAHMEN
  239.                  : MoveIcon(message)
  240.        ELSE
  241.            GrafMouse(PointHand,NIL);
  242.            DeselectIcon;
  243.            GrafRubberBox(mx,my,1,1,mx,my);
  244.            GrafMouse(Arrow,NIL);
  245.  
  246.        END(*CASE*);
  247.  
  248.     END(*IF*);
  249.    END(*IF*);
  250.  END(*IF*);
  251.  
  252.  IF and(events,TimerEvent) THEN
  253.      (**********************************************************************************************************)
  254.      (*String :='[0][ TimerEvent | Nur zum Test!!!!! |  Christian   Ledermann| ver 0.0 vom 25.02.93 ][  OK  ]';*)
  255.      (*formret:=FormAlert(1,String);                                                                           *)
  256.      (**********************************************************************************************************)
  257.  END(*IF*);
  258.  IF and(events,KeyboardEvent) THEN
  259.     IF ~MenuSearch(Appl,MenuTree,mstate,scancode,RetChar) THEN
  260.        IF RetChar=33C THEN (* ESC-Taste gedrückt!*)
  261.            ShowMenuBar(FALSE);
  262.            (* Hier wird ein Kommplett Redraw erzwungen ! *)
  263.            FormDialogue(0,0,0,0,0,deskx,desky,deskw,deskh);
  264.            FormDialogue(3,0,0,0,0,deskx,desky,deskw,deskh);
  265.            (* Menü wieder einschalten *)
  266.            ShowMenuBar(TRUE);
  267.         ELSE
  268.       (*    String :='[0][ Taste nicht belegt | Nur zum Test!|  Christian   Ledermann| ver 0.0 vom 25.02.92 ][  OK  ]';
  269.           formret:=FormAlert(1,String);*)
  270.         END(*IF*);
  271.     END(*IF*);
  272.  END(*IF*);
  273.  ShowNormal(DESK);
  274.  ShowNormal(FILE);
  275. UNTIL ENDE
  276. END Auswahl;
  277.  
  278. BEGIN
  279.     RSCfileName :='Odesktop.rsc';
  280.     Init;
  281.     OK:=InitResource(TREE1,TREE2,RSCfileName);
  282.     (*GrafMouse(Arrow,NIL);*)
  283.     IF Colour&OK THEN
  284.            ObjectChange(DeskTree,TREE1,0,deskx,desky,deskw,deskh,0,1);
  285.            (* Hier wird ein Kommplett Redraw erzwungen ! *)
  286.            FormDialogue(0,0,0,0,0,deskx,desky,deskw,deskh);
  287.            FormDialogue(3,0,0,0,0,deskx,desky,deskw,deskh);
  288.     END(*IF*);
  289.     IF OK THEN Auswahl END(*IF*);
  290.     Terminate;
  291. END Oshell.
  292.